/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import modelo.Ingreso;
import modelo.OperarConsumoIngreso;
import modelo.OperarIngreso;
import modelo.Usuario;
import negocio.IngresoBI;
import negocio.LigarUsuarioBI;
import negocio.UsuarioBI;
import pojos.MovimientoVO;

/**
 *
 * @author Francisco
 */
@ManagedBean(name="reporteCtrl")
@ViewScoped
public class ReporteCtrl {
    @Inject
    private UsuarioBI usuarioBI;
    @Inject
    private LigarUsuarioBI ligarUsuarioBI;
    @Inject
    private IngresoBI ingresoBI;
    
    private LoginCtrl login;
    private Usuario usuario;
    
    private List<MovimientoVO> movimientos = new ArrayList<MovimientoVO>();;
    private Date fechaInicio;
    private Date fechaFin;
    
    @PostConstruct
    public void init(){
        try{
            login = (LoginCtrl)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("login");
            String nombreUsuario = login.getUsuario();
            usuario = usuarioBI.buscarUsuario(nombreUsuario);
        }catch(Exception e){
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
        }
    }
    
    public void generar(){
        try{
            List<OperarIngreso> ingresos = ingresoBI.buscaIngresos(usuario.getIdUsuario(), fechaInicio, fechaFin);
            List<OperarConsumoIngreso> gtos = ingresoBI.buscarConsumoIngreso(usuario.getIdUsuario(), fechaInicio, fechaFin);
            if(ingresos!=null){
                for (OperarIngreso operarIngreso : ingresos) {
                    MovimientoVO mvo = new MovimientoVO();
                    mvo.setFecha(operarIngreso.getFechaOperacion());
                    mvo.setIngresos(operarIngreso.getMonto().doubleValue());
                }
            }
            if(gtos!=null){
                for (OperarConsumoIngreso operarConsumoIngreso : gtos) {
                    MovimientoVO mvo = new MovimientoVO();
                    mvo.setFecha(operarConsumoIngreso.getIdOperarConsumo().getFechaConsumo());
                    mvo.setGastos(operarConsumoIngreso.getMonto().doubleValue());
                }
            }
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_INFO, "Listo", "Guardado con éxito"));
        }catch(Exception e){
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
        }
    }
    
    public void cancelar(){
        fechaInicio = null;
        fechaFin = null;
        movimientos = new ArrayList<MovimientoVO>();
    }

    public Date getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public List<MovimientoVO> getMovimientos() {
        return movimientos;
    }

    public void setMovimientos(List<MovimientoVO> movimientos) {
        this.movimientos = movimientos;
    }
    
}
